﻿Public Interface ITwitterClient
    ''' <summary>
    ''' Twitterにログインしているかを取得します。
    ''' </summary>
    ''' <returns>ログインしていればTrue,ログインしていなければFalse</returns>
    ''' <remarks>
    ''' このプロパティがFalseのときにLoginまたはBeginLogin以外のメソッドを呼び出そうとするとInvalidOperationExceptionがスローされます。
    ''' </remarks>
    ReadOnly Property IsLogined() As Boolean

    ''' <summary>
    ''' Twitterにログインしているユーザー名を取得します。
    ''' </summary>
    ''' <returns>ユーザー名</returns>
    ''' <remarks></remarks>
    ReadOnly Property UserName() As String

    ''' <summary>
    ''' Twitterにログインします。
    ''' </summary>
    ''' <param name="userName">ユーザー名</param>
    ''' <param name="password">パスワード</param>
    ''' <returns>ログイン結果</returns>
    ''' <remarks></remarks>
    Function Login(ByVal userName As String, ByVal password As String) As LoginResult

    ''' <summary>
    ''' Twitterからログアウトします。
    ''' </summary>
    ''' <returns>ログアウト結果</returns>
    ''' <remarks></remarks>
    Function Logout() As LogoutResult

    ''' <summary>
    ''' ステータス文字列を指定して投稿します。
    ''' </summary>
    ''' <param name="status">ステータス文字列</param>
    ''' <returns>投稿されたステータス</returns>
    ''' <remarks></remarks>
    Function UpdateStatus(ByVal status As String) As TwitterStatus

    ''' <summary>
    ''' ステータス文字列と返信先のステータスを指定して投稿します。
    ''' </summary>
    ''' <param name="status">ステータス文字列</param>
    ''' <param name="inReplyToStatus">返信先のステータス</param>
    ''' <returns>投稿されたステータス</returns>
    ''' <remarks></remarks>
    Function UpdateStatus(ByVal status As String, ByVal inReplyToStatus As TwitterStatus) As TwitterStatus

    ''' <summary>
    ''' ステータス文字列と返信先のステータスIDを指定して投稿します。
    ''' </summary>
    ''' <param name="status">ステータス文字列</param>
    ''' <param name="inReplyToStatusID">返信先のステータスID</param>
    ''' <returns>投稿されたステータス</returns>
    ''' <remarks></remarks>
    Function UpdateStatus(ByVal status As String, ByVal inReplyToStatusID As Long) As TwitterStatus

    ''' <summary>
    ''' 投稿したステータスを削除します。
    ''' </summary>
    ''' <param name="statusID">ステータスID</param>
    ''' <returns>削除に成功すればTrue、失敗すればFalse</returns>
    ''' <remarks></remarks>
    Function DestroyStatus(ByVal statusID As Long) As Boolean

    ''' <summary>
    ''' 指定したステータスをお気に入りに追加します。
    ''' </summary>
    ''' <param name="statusID">ステータスID</param>
    ''' <returns>追加に成功すればTrue、失敗すればFalse</returns>
    ''' <remarks></remarks>
    Function CreateFavorite(ByVal statusID As Long) As Boolean

    ''' <summary>
    ''' 指定したステータスをお気に入りから削除します。
    ''' </summary>
    ''' <param name="statusID">ステータスID</param>
    ''' <returns>削除に成功すればTrue、失敗すればFalse</returns>
    ''' <remarks></remarks>
    Function DestroyFavorite(ByVal statusID As Long) As Boolean

    ''' <summary>
    ''' すべてのページから自分がフォローしているユーザーのコレクションを取得します。
    ''' </summary>
    ''' <returns>ユーザーのコレクション</returns>
    ''' <remarks></remarks>
    Function GetFriends() As IList(Of TwitterUser)

    ''' <summary>
    ''' ページを指定して自分がフォローしているユーザーのコレクションを取得します。
    ''' </summary>
    ''' <param name="beginPage">取得開始ページ</param>
    ''' <param name="endPage">取得終了ページ</param>
    ''' <returns>ユーザーのコレクション</returns>
    ''' <remarks>
    ''' beginPageまたはendPageが0以下の場合はそれぞれ無視されます。
    ''' </remarks>
    Function GetFriends(ByVal beginPage As Integer, ByVal endPage As Integer) As IList(Of TwitterUser)

    ''' <summary>
    ''' すべてのページから自分をフォローしているユーザーのコレクションを取得します。
    ''' </summary>
    ''' <returns>ユーザーのコレクション</returns>
    ''' <remarks></remarks>
    Function GetFollowers() As IList(Of TwitterUser)

    ''' <summary>
    ''' ページを指定して自分をフォローしているユーザーのコレクションを取得します。
    ''' </summary>
    ''' <param name="beginPage">取得開始ページ</param>
    ''' <param name="endPage">取得終了ページ</param>
    ''' <returns>フォローしているユーザーのコレクション</returns>
    ''' <remarks>
    ''' beginPageまたはendPageが0以下の場合はそれぞれ無視されます。
    ''' </remarks>
    Function GetFollowers(ByVal beginPage As Integer, ByVal endPage As Integer) As IList(Of TwitterUser)

    ''' <summary>
    ''' ユーザー名を指定してユーザーをフォローします。
    ''' </summary>
    ''' <param name="userName">フォローするユーザー名</param>
    ''' <returns>フォローに成功すればTrue、失敗すればFalse</returns>
    ''' <remarks></remarks>

    Function CreateFriendship(ByVal userName As String) As Boolean
    ''' <summary>
    ''' TwitterUserを指定してユーザーをフォローします。
    ''' </summary>
    ''' <param name="user">フォローするTwitterUser</param>
    ''' <returns>フォローに成功すればTrue、失敗すればFalse</returns>
    ''' <remarks></remarks>

    Function CreateFriendship(ByVal user As TwitterUser) As Boolean
    ''' <summary>
    ''' ユーザー名を指定してフォロー解除します。
    ''' </summary>
    ''' <param name="userName">フォロー解除するユーザー名</param>
    ''' <returns>フォロー解除に成功すればTrue、失敗すればFalse</returns>
    ''' <remarks></remarks>
    Function DestroyFriendship(ByVal userName As String) As Boolean

    ''' <summary>
    ''' TwitterUserを指定してユーザーをフォロー解除します。
    ''' </summary>
    ''' <param name="user">フォロー解除するTwitterUser</param>
    ''' <returns>フォロー解除に成功すればTrue、失敗すればFalse</returns>
    ''' <remarks></remarks>
    Function DestroyFriendship(ByVal user As TwitterUser) As Boolean

    ''' <summary>
    ''' ユーザー名を指定してブロックします。
    ''' </summary>
    ''' <param name="userName">ブロックするユーザー名</param>
    ''' <returns>ブロックに成功すればTrue、失敗すればFalse</returns>
    ''' <remarks></remarks>
    Function CreateBlock(ByVal userName As String) As Boolean

    ''' <summary>
    ''' TwitterUserを指定してユーザーをブロックします。
    ''' </summary>
    ''' <param name="user">ブロックするTwitterUser</param>
    ''' <returns>ブロックに成功すればTrue、失敗すればFalse</returns>
    ''' <remarks></remarks>
    Function CreateBlock(ByVal user As TwitterUser) As Boolean

    ''' <summary>
    ''' ユーザー名を指定してブロック解除します。
    ''' </summary>
    ''' <param name="userName">ブロック解除するユーザー名</param>
    ''' <returns>ブロック解除に成功すればTrue、失敗すればFalse</returns>
    ''' <remarks></remarks>
    Function DestroyBlock(ByVal userName As String) As Boolean

    ''' <summary>
    ''' TwitterUserを指定してユーザーをブロック解除します。
    ''' </summary>
    ''' <param name="user">ブロック解除するTwitterUser</param>
    ''' <returns>ブロック解除に成功すればTrue、失敗すればFalse</returns>
    ''' <remarks></remarks>
    Function DestroyBlock(ByVal user As TwitterUser) As Boolean

    ''' <summary>
    ''' パブリック(Public)タイムラインを取得します。
    ''' </summary>
    ''' <param name="maxPage">取得する最大ページ数</param>
    ''' <param name="lastStatus">取得済みの最新のステータス</param>
    ''' <returns>TwitterStatusのコレクション</returns>
    ''' <remarks></remarks>
    Function GetPublicTimeline(ByVal maxPage As Integer, ByVal lastStatus As TwitterStatus) As IList(Of TwitterStatus)

    ''' <summary>
    ''' パブリック(Public)タイムラインを取得します。
    ''' </summary>
    ''' <param name="maxPage">取得する最大ページ数</param>
    ''' <param name="lastStatusID">取得済みの最新のステータスの固有ID</param>
    ''' <returns>TwitterStatusのコレクション</returns>
    ''' <remarks></remarks>
    Function GetPublicTimeline(ByVal maxPage As Integer, ByVal lastStatusID As Long) As IList(Of TwitterStatus)

    ''' <summary>
    ''' ホーム(Recent/Friends)タイムラインを取得します。
    ''' </summary>
    ''' <param name="maxPage">取得する最大ページ数</param>
    ''' <param name="lastStatus">取得済みの最新のステータス</param>
    ''' <returns>TwitterStatusのコレクション</returns>
    ''' <remarks></remarks>
    Function GetHomeTimeline(ByVal maxPage As Integer, ByVal lastStatus As TwitterStatus) As IList(Of TwitterStatus)

    ''' <summary>
    ''' ホーム(Recent/Friends)タイムラインを取得します。
    ''' </summary>
    ''' <param name="maxPage">取得する最大ページ数</param>
    ''' <param name="lastStatusID">取得済みの最新のステータスの固有ID</param>
    ''' <returns>TwitterStatusのコレクション</returns>
    ''' <remarks></remarks>
    Function GetHomeTimeline(ByVal maxPage As Integer, ByVal lastStatusID As Long) As IList(Of TwitterStatus)

    ''' <summary>
    ''' 返信(Replies/Memento)タイムラインを取得します。
    ''' </summary>
    ''' <param name="maxPage">取得する最大ページ数</param>
    ''' <param name="lastStatus">取得済みの最新のステータス</param>
    ''' <returns>TwitterStatusのコレクション</returns>
    ''' <remarks></remarks>
    Function GetRepliesTimeline(ByVal maxPage As Integer, ByVal lastStatus As TwitterStatus) As IList(Of TwitterStatus)

    ''' <summary>
    ''' 返信(Replies/Memento)タイムラインを取得します。
    ''' </summary>
    ''' <param name="maxPage">取得する最大ページ数</param>
    ''' <param name="lastStatusID">取得済みの最新のステータスの固有ID</param>
    ''' <returns>TwitterStatusのコレクション</returns>
    ''' <remarks></remarks>
    Function GetRepliesTimeline(ByVal maxPage As Integer, ByVal lastStatusID As Long) As IList(Of TwitterStatus)

    ''' <summary>
    ''' 受信ダイレクトメッセージ(Inbox)タイムラインを取得します。
    ''' </summary>
    ''' <param name="maxPage">取得する最大ページ数</param>
    ''' <param name="lastStatus">取得済みの最新のステータス</param>
    ''' <returns>TwitterStatusのコレクション</returns>
    ''' <remarks></remarks>
    Function GetInboxTimeline(ByVal maxPage As Integer, ByVal lastStatus As TwitterStatus) As IList(Of TwitterStatus)

    ''' <summary>
    ''' 受信ダイレクトメッセージ(Inbox)タイムラインを取得します。
    ''' </summary>
    ''' <param name="maxPage">取得する最大ページ数</param>
    ''' <param name="lastStatusID">取得済みの最新のステータスの固有ID</param>
    ''' <returns>TwitterStatusのコレクション</returns>
    ''' <remarks></remarks>
    Function GetInboxTimeline(ByVal maxPage As Integer, ByVal lastStatusID As Long) As IList(Of TwitterStatus)

    ''' <summary>
    ''' 送信ダイレクトメッセージ(Sent)タイムラインを取得します。
    ''' </summary>
    ''' <param name="maxPage">取得する最大ページ数</param>
    ''' <param name="lastStatus">取得済みの最新のステータス</param>
    ''' <returns>TwitterStatusのコレクション</returns>
    ''' <remarks></remarks>
    Function GetSentTimeline(ByVal maxPage As Integer, ByVal lastStatus As TwitterStatus) As IList(Of TwitterStatus)

    ''' <summary>
    ''' 送信ダイレクトメッセージ(Sent)タイムラインを取得します。
    ''' </summary>
    ''' <param name="maxPage">取得する最大ページ数</param>
    ''' <param name="lastStatusID">取得済みの最新のステータスの固有ID</param>
    ''' <returns>TwitterStatusのコレクション</returns>
    ''' <remarks></remarks>
    Function GetSentTimeline(ByVal maxPage As Integer, ByVal lastStatusID As Long) As IList(Of TwitterStatus)

    ''' <summary>
    ''' ユーザーのタイムラインを取得します。
    ''' </summary>
    ''' <param name="maxPage">取得する最大ページ数</param>
    ''' <param name="lastStatus">取得済みの最新のステータス</param>
    ''' <returns>TwitterStatusのコレクション</returns>
    ''' <remarks></remarks>
    Function GetUserTimeline(ByVal maxPage As Integer, ByVal lastStatus As TwitterStatus, ByVal user As TwitterUser) As IList(Of TwitterStatus)

    ''' <summary>
    ''' ユーザーのタイムラインを取得します。
    ''' </summary>
    ''' <param name="maxPage">取得する最大ページ数</param>
    ''' <param name="lastStatusID">取得済みの最新のステータスの固有ID</param>
    ''' <returns>TwitterStatusのコレクション</returns>
    ''' <remarks></remarks>
    Function GetUserTimeline(ByVal maxPage As Integer, ByVal lastStatusID As Long, ByVal userName As String) As IList(Of TwitterStatus)

    ''' <summary>
    ''' ユーザーのお気に入りを取得します。
    ''' </summary>
    ''' <param name="maxPage">取得する最大ページ数</param>
    ''' <param name="lastStatus">取得済みの最新のステータス</param>
    ''' <returns>TwitterStatusのコレクション</returns>
    ''' <remarks></remarks>
    Function GetUserFavorites(ByVal maxPage As Integer, ByVal lastStatus As TwitterStatus, ByVal user As TwitterUser) As IList(Of TwitterStatus)

    ''' <summary>
    ''' ユーザーのお気に入りを取得します。
    ''' </summary>
    ''' <param name="maxPage">取得する最大ページ数</param>
    ''' <param name="lastStatusID">取得済みの最新のステータスの固有ID</param>
    ''' <returns>TwitterStatusのコレクション</returns>
    ''' <remarks></remarks>
    Function GetUserFavorites(ByVal maxPage As Integer, ByVal lastStatusID As Long, ByVal userName As String) As IList(Of TwitterStatus)
End Interface
